There is no need to pin page tables when XENFEAT_writable_page_tables
authorIan.Campbell@xensource.com <Ian.Campbell@xensource.com>
Wed, 15 Mar 2006 10:33:43 +0000 (10:33 +0000)
committerIan.Campbell@xensource.com <Ian.Campbell@xensource.com>
Wed, 15 Mar 2006 10:33:43 +0000 (10:33 +0000)
is enabled.

Signed-off-by: Ian Campbell <ian.campbell@xensource.com>
linux-2.6-xen-sparse/arch/i386/mm/pgtable-xen.c
linux-2.6-xen-sparse/arch/x86_64/mm/pageattr-xen.c

index c2d97b5b2d8871adf443fb57e6408cb50fa7b730..b6109de24e34630760c64f3f5ebaa4739ac0bcc1 100644 (file)
@@ -587,6 +587,8 @@ static void pgd_test_and_unpin(pgd_t *pgd)
 
 void mm_pin(struct mm_struct *mm)
 {
+       if (xen_feature(XENFEAT_writable_page_tables))
+           return;
        spin_lock(&mm->page_table_lock);
        __pgd_pin(mm->pgd);
        spin_unlock(&mm->page_table_lock);
@@ -594,6 +596,8 @@ void mm_pin(struct mm_struct *mm)
 
 void mm_unpin(struct mm_struct *mm)
 {
+       if (xen_feature(XENFEAT_writable_page_tables))
+           return;
        spin_lock(&mm->page_table_lock);
        __pgd_unpin(mm->pgd);
        spin_unlock(&mm->page_table_lock);
@@ -602,6 +606,8 @@ void mm_unpin(struct mm_struct *mm)
 void mm_pin_all(void)
 {
        struct page *page;
+       if (xen_feature(XENFEAT_writable_page_tables))
+           return;
        for (page = pgd_list; page; page = (struct page *)page->index) {
                if (!test_bit(PG_pinned, &page->flags))
                        __pgd_pin((pgd_t *)page_address(page));
index a39d4ab23ca39ba96f19ef916f91b58b0655f7c3..079f471c37495e9a0c5aff143854734e4198728b 100644 (file)
@@ -71,6 +71,9 @@ static void mm_walk(struct mm_struct *mm, pgprot_t flags)
 
 void mm_pin(struct mm_struct *mm)
 {
+       if (xen_feature(XENFEAT_writable_page_tables))
+               return;
+
        spin_lock(&mm->page_table_lock);
 
        mm_walk(mm, PAGE_KERNEL_RO);
@@ -94,6 +97,9 @@ void mm_pin(struct mm_struct *mm)
 
 void mm_unpin(struct mm_struct *mm)
 {
+       if (xen_feature(XENFEAT_writable_page_tables))
+               return;
+
        spin_lock(&mm->page_table_lock);
 
        xen_pgd_unpin(__pa(mm->pgd));
@@ -116,6 +122,9 @@ void mm_unpin(struct mm_struct *mm)
 
 void mm_pin_all(void)
 {
+       if (xen_feature(XENFEAT_writable_page_tables))
+               return;
+
        while (!list_empty(&mm_unpinned))       
                mm_pin(list_entry(mm_unpinned.next, struct mm_struct,
                                  context.unpinned));